package com.shujia.wyh.day25;

import java.io.*;

/*
        序列化：把对象按照流一样的方式存到文本文件或者数据库或者网络中传输等等。
            对象 -- 流数据：ObjectOutputStream

        反序列化：把文本文件中的对象或者网络中的流数据给还原成一个对象的过程。
            流数据 -- 对象：ObjectInputStream
 */
public class ObjectOutputStreamDemo1 {
    public static void main(String[] args) {
        //写数据，序列化，将一个对象存到一个文件中，这个过程叫做序列持久化。
//        write();

        read();
    }

    public static void read(){
        //创建对象输入流
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(new FileInputStream("src\\com\\shujia\\wyh\\day25\\obj.txt"));
            //调用方法读取数据
            Object o = ois.readObject();
//            System.out.println(o);

            //要想使用读取到的对象类型中的方法，就得向下转型
            Person p = (Person) o;
            System.out.println(p);
        } catch (Exception e) {
            e.printStackTrace();
        }  finally {
            if(ois!=null){
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    public static void write(){
        ObjectOutputStream oos = null;
        //创建一个对象输出流
        try {
            oos = new ObjectOutputStream(new FileOutputStream("src\\com\\shujia\\wyh\\day25\\obj.txt"));
            //创建一个对象
            Person p = new Person("李毅", 18);

            //调用方法，将对象写入到文件中进行存储
            oos.writeObject(p);

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(oos!=null){
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
